﻿using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using Teigha.Core;

namespace Teigha.TD
{
	public class OdDbMaterial : OdDbObject
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public OdDbMaterial(IntPtr cPtr, bool cMemoryOwn) : base(TD_DbPINVOKE.OdDbMaterial_SWIGUpcast(cPtr), cMemoryOwn)
		{
			this.swigCPtr = new HandleRef(this, cPtr);
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public static HandleRef getCPtr(OdDbMaterial obj)
		{
			if (obj != null)
			{
				return obj.swigCPtr;
			}
			return new HandleRef(null, IntPtr.Zero);
		}

		~OdDbMaterial()
		{
			this.Dispose();
		}

		public override void Dispose()
		{
			if (this.swigCPtr.Handle != IntPtr.Zero)
			{
				if (this.swigCMemOwn)
				{
					lock (this.locker)
					{
						if (this.swigCPtr.Handle != IntPtr.Zero && this.swigCMemOwn)
						{
							this.swigCMemOwn = false;
							TD_DbPINVOKE.delete_OdDbMaterial(this.swigCPtr);
						}
					}
					this.swigCMemOwn = false;
				}
				this.swigCPtr = new HandleRef(null, IntPtr.Zero);
			}
			GC.SuppressFinalize(this);
			base.Dispose();
		}

		public new static OdDbMaterial cast(OdRxObject pObj)
		{
			MemoryManager memoryManager = MemoryManager.GetMemoryManager();
			MemoryTransaction currentTransaction = memoryManager.GetCurrentTransaction();
			IntPtr p = TD_DbPINVOKE.OdDbMaterial_cast(OdRxObject.getCPtr(pObj));
			OdDbMaterial result;
			if (currentTransaction != null)
			{
				currentTransaction.AddObject((OdDbMaterial)Teigha.Core.Helpers.odrxCreateObjectInternal(p, true));
				result = (OdDbMaterial)Teigha.Core.Helpers.odrxCreateObjectInternal(p, false);
			}
			else
			{
				result = (OdDbMaterial)Teigha.Core.Helpers.odrxCreateObjectInternal(p, true);
			}
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new static OdRxClass desc()
		{
			OdRxClass result = (OdRxClass)Teigha.Core.Helpers.odrxCreateObjectInternal(TD_DbPINVOKE.OdDbMaterial_desc(), false);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new virtual OdRxClass isA()
		{
			OdRxClass result = (OdRxClass)Teigha.Core.Helpers.odrxCreateObjectInternal(TD_DbPINVOKE.OdDbMaterial_isA(this.swigCPtr), false);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new virtual OdRxObject queryX(OdRxClass protocolClass)
		{
			OdRxObject result = Teigha.Core.Helpers.odrxCreateObjectInternal(TD_DbPINVOKE.OdDbMaterial_queryX(this.swigCPtr, OdRxClass.getCPtr(protocolClass)), false);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new static OdDbMaterial createObject()
		{
			MemoryManager memoryManager = MemoryManager.GetMemoryManager();
			MemoryTransaction currentTransaction = memoryManager.GetCurrentTransaction();
			IntPtr p = TD_DbPINVOKE.OdDbMaterial_createObject();
			OdDbMaterial result;
			if (currentTransaction != null)
			{
				currentTransaction.AddObject((OdDbMaterial)Teigha.Core.Helpers.odrxCreateObjectInternal(p, true));
				result = (OdDbMaterial)Teigha.Core.Helpers.odrxCreateObjectInternal(p, false);
			}
			else
			{
				result = (OdDbMaterial)Teigha.Core.Helpers.odrxCreateObjectInternal(p, true);
			}
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual OdResult setName(string name)
		{
			OdResult result = (OdResult)TD_DbPINVOKE.OdDbMaterial_setName(this.swigCPtr, name);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual string name()
		{
			string result = TD_DbPINVOKE.OdDbMaterial_name(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setDescription(string description)
		{
			TD_DbPINVOKE.OdDbMaterial_setDescription(this.swigCPtr, description);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual string description()
		{
			string result = TD_DbPINVOKE.OdDbMaterial_description(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setAmbient(OdGiMaterialColor ambientColor)
		{
			TD_DbPINVOKE.OdDbMaterial_setAmbient(this.swigCPtr, OdGiMaterialColor.getCPtr(ambientColor));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void ambient(OdGiMaterialColor ambientColor)
		{
			TD_DbPINVOKE.OdDbMaterial_ambient(this.swigCPtr, OdGiMaterialColor.getCPtr(ambientColor));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void setDiffuse(OdGiMaterialColor diffuseColor, OdGiMaterialMap diffuseMap)
		{
			TD_DbPINVOKE.OdDbMaterial_setDiffuse(this.swigCPtr, OdGiMaterialColor.getCPtr(diffuseColor), OdGiMaterialMap.getCPtr(diffuseMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void diffuse(OdGiMaterialColor diffuseColor, OdGiMaterialMap diffuseMap)
		{
			TD_DbPINVOKE.OdDbMaterial_diffuse(this.swigCPtr, OdGiMaterialColor.getCPtr(diffuseColor), OdGiMaterialMap.getCPtr(diffuseMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void setSpecular(OdGiMaterialColor specularColor, OdGiMaterialMap specularMap, double glossFactor)
		{
			TD_DbPINVOKE.OdDbMaterial_setSpecular(this.swigCPtr, OdGiMaterialColor.getCPtr(specularColor), OdGiMaterialMap.getCPtr(specularMap), glossFactor);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void specular(OdGiMaterialColor specularColor, OdGiMaterialMap specularMap, out double glossFactor)
		{
			TD_DbPINVOKE.OdDbMaterial_specular(this.swigCPtr, OdGiMaterialColor.getCPtr(specularColor), OdGiMaterialMap.getCPtr(specularMap), out glossFactor);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void setReflection(OdGiMaterialMap reflectionMap)
		{
			TD_DbPINVOKE.OdDbMaterial_setReflection(this.swigCPtr, OdGiMaterialMap.getCPtr(reflectionMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void reflection(OdGiMaterialMap reflectionMap)
		{
			TD_DbPINVOKE.OdDbMaterial_reflection(this.swigCPtr, OdGiMaterialMap.getCPtr(reflectionMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void setOpacity(double opacityPercentage, OdGiMaterialMap opacityMap)
		{
			TD_DbPINVOKE.OdDbMaterial_setOpacity(this.swigCPtr, opacityPercentage, OdGiMaterialMap.getCPtr(opacityMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void opacity(out double opacityPercentage, OdGiMaterialMap opacityMap)
		{
			TD_DbPINVOKE.OdDbMaterial_opacity(this.swigCPtr, out opacityPercentage, OdGiMaterialMap.getCPtr(opacityMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void setBump(OdGiMaterialMap bumpMap)
		{
			TD_DbPINVOKE.OdDbMaterial_setBump(this.swigCPtr, OdGiMaterialMap.getCPtr(bumpMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void bump(OdGiMaterialMap map)
		{
			TD_DbPINVOKE.OdDbMaterial_bump(this.swigCPtr, OdGiMaterialMap.getCPtr(map));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void setRefraction(double refractionIndex, OdGiMaterialMap refractionMap)
		{
			TD_DbPINVOKE.OdDbMaterial_setRefraction(this.swigCPtr, refractionIndex, OdGiMaterialMap.getCPtr(refractionMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void refraction(out double refractionIndex, OdGiMaterialMap refractionMap)
		{
			TD_DbPINVOKE.OdDbMaterial_refraction(this.swigCPtr, out refractionIndex, OdGiMaterialMap.getCPtr(refractionMap));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public new virtual OdResult dwgInFields(OdDbDwgFiler pFiler)
		{
			OdResult result = (OdResult)TD_DbPINVOKE.OdDbMaterial_dwgInFields(this.swigCPtr, OdDbDwgFiler.getCPtr(pFiler));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new virtual void dwgOutFields(OdDbDwgFiler pFiler)
		{
			TD_DbPINVOKE.OdDbMaterial_dwgOutFields(this.swigCPtr, OdDbDwgFiler.getCPtr(pFiler));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public new virtual OdResult dxfInFields(OdDbDxfFiler pFiler)
		{
			OdResult result = (OdResult)TD_DbPINVOKE.OdDbMaterial_dxfInFields(this.swigCPtr, OdDbDxfFiler.getCPtr(pFiler));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new virtual void dxfOutFields(OdDbDxfFiler pFiler)
		{
			TD_DbPINVOKE.OdDbMaterial_dxfOutFields(this.swigCPtr, OdDbDxfFiler.getCPtr(pFiler));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public new virtual OdGiDrawable drawable()
		{
			OdGiDrawable result = (OdGiDrawable)Teigha.Core.Helpers.odrxCreateObjectInternal(TD_DbPINVOKE.OdDbMaterial_drawable(this.swigCPtr), false);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new virtual uint subSetAttributes(OdGiDrawableTraits pTraits)
		{
			uint result = TD_DbPINVOKE.OdDbMaterial_subSetAttributes(this.swigCPtr, OdGiDrawableTraits.getCPtr(pTraits));
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual double translucence()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_translucence(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setTranslucence(double translucence)
		{
			TD_DbPINVOKE.OdDbMaterial_setTranslucence(this.swigCPtr, translucence);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double selfIllumination()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_selfIllumination(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setSelfIllumination(double selfIllumination)
		{
			TD_DbPINVOKE.OdDbMaterial_setSelfIllumination(this.swigCPtr, selfIllumination);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double reflectivity()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_reflectivity(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setReflectivity(double reflectivity)
		{
			TD_DbPINVOKE.OdDbMaterial_setReflectivity(this.swigCPtr, reflectivity);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual OdGiMaterialTraits.Mode mode()
		{
			OdGiMaterialTraits.Mode result = (OdGiMaterialTraits.Mode)TD_DbPINVOKE.OdDbMaterial_mode(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setMode(OdGiMaterialTraits.Mode mode)
		{
			TD_DbPINVOKE.OdDbMaterial_setMode(this.swigCPtr, (int)mode);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual OdGiMaterialTraits.ChannelFlags channelFlags()
		{
			OdGiMaterialTraits.ChannelFlags result = (OdGiMaterialTraits.ChannelFlags)TD_DbPINVOKE.OdDbMaterial_channelFlags(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setChannelFlags(OdGiMaterialTraits.ChannelFlags channelFlags)
		{
			TD_DbPINVOKE.OdDbMaterial_setChannelFlags(this.swigCPtr, (int)channelFlags);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual OdGiMaterialTraits.IlluminationModel illuminationModel()
		{
			OdGiMaterialTraits.IlluminationModel result = (OdGiMaterialTraits.IlluminationModel)TD_DbPINVOKE.OdDbMaterial_illuminationModel(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setIlluminationModel(OdGiMaterialTraits.IlluminationModel illuminationMode)
		{
			TD_DbPINVOKE.OdDbMaterial_setIlluminationModel(this.swigCPtr, (int)illuminationMode);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double colorBleedScale()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_colorBleedScale(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setColorBleedScale(double scale)
		{
			TD_DbPINVOKE.OdDbMaterial_setColorBleedScale(this.swigCPtr, scale);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double indirectBumpScale()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_indirectBumpScale(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setIndirectBumpScale(double scale)
		{
			TD_DbPINVOKE.OdDbMaterial_setIndirectBumpScale(this.swigCPtr, scale);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double reflectanceScale()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_reflectanceScale(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setReflectanceScale(double scale)
		{
			TD_DbPINVOKE.OdDbMaterial_setReflectanceScale(this.swigCPtr, scale);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double transmittanceScale()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_transmittanceScale(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setTransmittanceScale(double scale)
		{
			TD_DbPINVOKE.OdDbMaterial_setTransmittanceScale(this.swigCPtr, scale);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual bool twoSided()
		{
			bool result = TD_DbPINVOKE.OdDbMaterial_twoSided(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setTwoSided(bool flag)
		{
			TD_DbPINVOKE.OdDbMaterial_setTwoSided(this.swigCPtr, flag);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual OdGiMaterialTraits.LuminanceMode luminanceMode()
		{
			OdGiMaterialTraits.LuminanceMode result = (OdGiMaterialTraits.LuminanceMode)TD_DbPINVOKE.OdDbMaterial_luminanceMode(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setLuminanceMode(OdGiMaterialTraits.LuminanceMode mode)
		{
			TD_DbPINVOKE.OdDbMaterial_setLuminanceMode(this.swigCPtr, (int)mode);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double luminance()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_luminance(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setLuminance(double value)
		{
			TD_DbPINVOKE.OdDbMaterial_setLuminance(this.swigCPtr, value);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual double shininess()
		{
			double result = TD_DbPINVOKE.OdDbMaterial_shininess(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setShininess(double value)
		{
			TD_DbPINVOKE.OdDbMaterial_setShininess(this.swigCPtr, value);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void normalMap(OdGiMaterialMap normalMap, out OdGiMaterialTraits.NormalMapMethod method, out double strength)
		{
			TD_DbPINVOKE.OdDbMaterial_normalMap(this.swigCPtr, OdGiMaterialMap.getCPtr(normalMap), out method, out strength);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual void setNormalMap(OdGiMaterialMap normalMap, OdGiMaterialTraits.NormalMapMethod method, double strength)
		{
			TD_DbPINVOKE.OdDbMaterial_setNormalMap(this.swigCPtr, OdGiMaterialMap.getCPtr(normalMap), (int)method, strength);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual bool isAnonymous()
		{
			bool result = TD_DbPINVOKE.OdDbMaterial_isAnonymous(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setAnonymous(bool flag)
		{
			TD_DbPINVOKE.OdDbMaterial_setAnonymous(this.swigCPtr, flag);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual OdGiMaterialTraits.GlobalIlluminationMode globalIllumination()
		{
			OdGiMaterialTraits.GlobalIlluminationMode result = (OdGiMaterialTraits.GlobalIlluminationMode)TD_DbPINVOKE.OdDbMaterial_globalIllumination(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setGlobalIllumination(OdGiMaterialTraits.GlobalIlluminationMode mode)
		{
			TD_DbPINVOKE.OdDbMaterial_setGlobalIllumination(this.swigCPtr, (int)mode);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual OdGiMaterialTraits.FinalGatherMode finalGather()
		{
			OdGiMaterialTraits.FinalGatherMode result = (OdGiMaterialTraits.FinalGatherMode)TD_DbPINVOKE.OdDbMaterial_finalGather(this.swigCPtr);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public virtual void setFinalGather(OdGiMaterialTraits.FinalGatherMode mode)
		{
			TD_DbPINVOKE.OdDbMaterial_setFinalGather(this.swigCPtr, (int)mode);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public virtual OdResult subGetClassID(IntPtr pClsid)
		{
			OdResult result = (OdResult)TD_DbPINVOKE.OdDbMaterial_subGetClassID(this.swigCPtr, pClsid);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public new virtual OdResult subErase(bool erasing)
		{
			OdResult result = (OdResult)TD_DbPINVOKE.OdDbMaterial_subErase(this.swigCPtr, erasing);
			if (TD_DbPINVOKE.SWIGPendingException.Pending)
			{
				throw TD_DbPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		private object locker = new object();

		private HandleRef swigCPtr;
	}
}
